package com.yujiahao.bigdata.streaming


import org.apache.kafka.clients.producer.{KafkaProducer, ProducerConfig, ProducerRecord}

import java.util.{Properties, Random}
import scala.collection.mutable.ListBuffer
//TODO 这里在做案例之前我们要先生成数据，在kafka中往指定主题生产数据

object Stream_Test_RandomData {
  def main(args: Array[String]): Unit = {

    //TODO 生产数据
    //TODO 2、创建配置对象
    val prop = new Properties()

    //TODO 3、添加参数配置--连接kafka、K V 序列化，其他的参数配置也可以添加，这里就简单的生产一些数据
    prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG," hadoop102:9092")
    prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
    prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
    //TODO 1、创建Kafka生产者，发现需要一些配置，那么我们就补一个配置文件放进去
    val producer: KafkaProducer[String, String] = new KafkaProducer[String, String](prop)

    //TODO 4、接下来进行生产数据
    while (true){
      for( data <- getDatas){
        //本地测试是否能生成数据
//        println(data)
        val record = new ProducerRecord[String, String]("atguigu210819", data)
        producer.send(record)
      }
      Thread.sleep(2000)
    }
        //这个方法里面专门就是模拟数据的，然后上面进行调用
        def getDatas():ListBuffer[String] = {
          //返回值为List集合，那么就新建一个集合将数据获取到追加进去再返回就行
          val list = ListBuffer[String]()
          //下面将随机的地区和城市声明到集合中，然后随机获取
          val areas= List("华北","华南","东北")
          val citys= List("北京","上海","西安")

          //循环随机生成50以内条数据
          for( i <- 1 to new Random().nextInt(50)){

            //时间
            val ts: Long = System.currentTimeMillis()
            //同过随机获取集合尺寸之内的数据作为角标拿到数据
            val area: String = areas(new Random().nextInt(areas.size))
            val city: String = citys(new Random().nextInt(citys.size))
            val userid = new Random().nextInt(6) + 1
            val adid = new Random().nextInt(6) + 1
            //将上面随机生成的数当做一组放入集合中，然后经过生产者进行生产
            list.append(s"${ts} ${area} ${city} ${userid} ${adid}")
          }

          list
        }
  }

}
